/**
 * 将对象转换为查询字符串
 * @param obj 需要转换的对象，键为字符串，值可以是任意类型
 * @returns 返回转换后的查询字符串
 */
export function objectToQueryString(obj: Record<string, any>): string {
  return Object.keys(obj)
    .map((key) => {
      // 忽略值为undefined或null的键
      if (obj[key] === undefined || obj[key] === null) {
        return ""
      }
      // 如果值为数组，则展开数组项
      if (Array.isArray(obj[key])) {
        return obj[key]
          .map(
            (value) => `${encodeURIComponent(key)}=${encodeURIComponent(value)}`
          )
          .join("&")
      }
      // 对键值进行URL编码
      return `${encodeURIComponent(key)}=${encodeURIComponent(obj[key])}`
    })
    .filter(Boolean) // 过滤掉空值
    .join("&") // 拼接为字符串
}

/**
 * 将查询字符串转换为对象
 * @param queryString 查询字符串
 * @returns 返回转换后的对象，键为字符串，值可以是字符串或字符串数组
 */
// export function queryStringToObject(queryString: string): {
//   [key: string]: any | any[]
// } {
//   const params: { [key: string]: any | any[] } = {}
//   // 分割查询字符串为键值对
//   const pairs = queryString.split("&")
//   for (const pair of pairs) {
//     // 分割键值对，并进行URL解码
//     const [key, value] = pair.split("=").map(decodeURIComponent)
//     // 如果键不存在于结果对象中，则直接添加
//     if (params[key] === undefined) {
//       params[key] = value
//     } else {
//       // 如果键已存在且为字符串，则转换为数组并添加新值
//       if (typeof params[key] === "string") {
//         params[key] = [params[key] as string]
//       }
//       // 如果键已存在且为数组，则直接添加新值
//       ;(params[key] as string[]).push(value)
//     }
//   }
//   return params
// }
